/*
  在ts中的类 用法和es6所提供的类的用户基本是一致的，如果学习过es6，ts的类应该是算简单的
    在ES6的基础上新添加了 类型判断 以及关键字 public prvitead protectd关键字
    这三个字如果学过c#其实是非常的亲切的  都是一个道理

    关键字：
      public -- 默认的关键字 类内部 外部 子类都可以直接访问待
      protected -- 受保护的关键字 类内部可以访问 继承的函数可以访问  外部无法访问
      private  --  私有属性 只有自己的类内部可以访问，  外部和继承的类都是没有权限访问

    看到这些代码还是相对来说非常亲切的 因为c#都学习过 果然学习就是有好处的
*/

class student {
  public name: string
  protected course: string
  private teacher: string
  constructor(namea: string, course: string, teacher: string) {
    this.name = namea
    this.course = course
    this.teacher = teacher
  }
  showName(): void {
    console.log(`${this.name}的选课是${this.course},它的老师是${this.teacher}`)
  }
  setName(value: string): void {
    this.name = value
  }
}

let Jim = new student('jimmy', 'JS', 'missYe')
Jim.showName() // jimmy的选课是JS,它的老师是missYe
console.log(Jim.name)
// console.log(Jim.course)  报错 因为类型不是public  所以在外部访问会报错
// console.log(Jim.teacher)  报错 因为类型不是public  所以在外部访问会报错

class person extends student {
  constructor(name: string, course: string, teacher: string) {
    super(name, course, teacher)
  }
  showExtendmSG(): void {
    console.log(`${this.name}选的课程是${this.course},他的授课老师是${this}`)
    //  console.log(`he is teacher is ${this.teacher}`)  报错
    /**/
  }
}
